Prophet: 时间序列预测库
prophet是facebook开源的python预测库,该库的api设计与sklearn很像,也是分为fit方法和predict方法。
prophet库可以帮助我们进行
Saturating Forecasts
Trend Changepoints
Seasonality, Holidays Effects
Multiplicative Seasonality
Uncertainty Intervals
Outliers
Non-Daily Data
Diagnostics
传入prophet的数据分为两列 ds 和 y, 其中
ds是pandas的日期格式,样式类似与
YYYY-MM-DDfora dateorYYYY-MM-DD HH:MM:SS
;y列必须是数值型,代表着我们希望预测的值。
本文使用的是wiki网站日访问量(数值经过log处理)的csv数据文件。
安装
!pip3 install fbprophet
一、导入数据
import pandas as pd
from fbprophet import Prophet
df = pd.read_csv('example_wp_log_peyton_manning.csv')
df.head()
检查下df的数据类型
df.dtypes
Run
ds object
y float64
dtype: object
ds列必须是pandas的datetime数据类型,我们使用pandas自带的pd.to_datetime将日期转为datetime类型。顺便画个图看看
df['ds'] = df['ds'].apply(pd.to_datetime)
df.set_index('ds').plot()
二、拟合数据
学习数据中的规律
prophet = Prophet()
prophet.fit(df)
三、预测
生成一个未来的日期的dataframe,然后用训练好的模型prophet来predict。
生成未来日期的dateframe用到 Prophet.makefuturedataframe(periods)
future = prophet.make_future_dataframe(periods=365)
future.tail()
有了未来的日期,我们就可以使用学习到的趋势来预测未来日期的走势。
预测的结果包括如下变量
'ds', 'trend', 'yhat_lower', 'yhat_upper', 'trend_lower', 'trend_upper',
'additive_terms', 'additive_terms_lower', 'additive_terms_upper',
'weekly', 'weekly_lower', 'weekly_upper', 'yearly', 'yearly_lower',
'yearly_upper', 'multiplicative_terms', 'multiplicative_terms_lower',
'multiplicative_terms_upper', 'yhat'
我们只用 'ds','yhat','yhat_lower','yhat_upper'
forecast = prophet.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].head()
Prophet.plot方法可以帮助我们可视化
fig1 = prophet.plot(forecast)
print(fig1)
成分分析
趋势是由不同的成分组成,比如总趋势、年、季节、月、周等等,我们要将这些成分从趋势中抽取出来看看不同成分的趋势情况
fig2 = prophet.plot_components(forecast)
print(fig2)
prophet库的API相对简单,并且由于使用了pandas标准的dataframe和matplotlib来显示数据,因此很适合python数据科学工作流程。
近期文章
顺利开班 | python爬虫分析2019年杭州国庆工作坊顺利开班
课件获取方式,请在公众号后台回复关键词“20191013”